/**
 * Projet de LIF12 : messagerie instantanée.
 * Partie client.
 *
 * @file client/main.c
 * @author Elsa FLECHON elsa.flechon@etu.univ-lyon1.fr
 * @author Emmanuel GAUDE emmanuel.gaude@etu.univ-lyon1.fr
 * @author Grégoire LEMASSON gregoire.lemasson@etu.univ-lyon1.fr
 * @since 2009/03/10
 * @version 2009/03/11
 */

/* -- Inclusion des en-têtes. ----------------------------------------------- */
#include <stdio.h> /* printf(), fprintf(), fflush(), stderr, stdout, perror() */
#include <stdlib.h> /* exit(), EXIT_SUCCESS, EXIT_FAILURE */
#include <string.h> /* memset() */
#include <unistd.h> /* close() */
#include <errno.h> /* errno */
#include <sys/types.h> /* socket(), bind()  */
#include <sys/socket.h> /* socket(), inet_addr(), in_addr_t , AF_INET,
                           SOCK_STREAM */
#include <netinet/in.h> /* inet_addr(), in_addr_t */
#include <arpa/inet.h> /* inet_addr(), htons(), htonl(), in_addr_t */



/* -- Définition des constantes. -------------------------------------------- */
#define SRV_IP "127.0.0.1" /**< Adresse IP du serveur. */
#define SRV_PORT 26387 /**< Numéro de port du serveur. */

/* -- Point d'entrée du programme. ------------------------------------------ */
int main() {
  /* -- Variables locales. -------------------------------------------------- */
  int s = 0; /**< Socket. */
  struct sockaddr_in saSrv; /**< Adresse socket serveur. */

  /* -- Présentation du programme. ------------------------------------------ */
  printf("\033[1m -- Projet LIF12 : Messagerie instantanée --\n");
  printf(" -- Groupe 2 : FLECHON - GAUDE - LEMASSON --\n");
  printf(" -- Exécutable client (2009/03/11)        --\033[0m\n\n");

  printf("LOG D'EXÉCUTION :\n");

  /* -- Création de la socket. ---------------------------------------------- */
  printf(" - Création de la socket... ");
  fflush(stdout);
  if((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
    perror("Erreur à la création de la socket ");
    exit(EXIT_FAILURE);
  }
  printf("OK\n");

  /* -- Attachement de la socket. ------------------------------------------- */
  printf(" - Attachement de la socket... ");
  fflush(stdout);
  memset(&saSrv, 0, sizeof(saSrv));
  saSrv.sin_family = AF_INET;
  saSrv.sin_port=htons(SRV_PORT);
  saSrv.sin_addr.s_addr=inet_addr(SRV_IP);
  if(bind(s, (const struct sockaddr*) &saSrv, sizeof(saSrv)) == -1) {
    perror("Erreur à l'attachement de la socket serveur ");
    exit(EXIT_FAILURE);
  }
  printf("OK\n");

  /* -- Fermeture de la socket. ---------------------------------------------- */
  printf(" - Fermeture de la socket... ");
  fflush(stdout);
  if(close(s) == -1) {
    perror("Erreur à la fermeture de la socket ");
    exit(EXIT_FAILURE);
  }
  printf("OK\n");

  return EXIT_SUCCESS;
} /* Fin du main(). */
